package testdemo;

import java.util.LinkedList;
import java.util.Stack;

class MyQueue {
    //"入队": 把数据放在第一个栈当中
    //"出队": 出S2这个栈当中的栈顶元素即可,如果S2为空,把S1里面所有的元素全部放到S2.
    //当两个栈为空的时,说明模拟的队列为空

    //用两个栈模拟队列实现
    private Stack<Integer> s1;
    private Stack<Integer> s2;

    public MyQueue() {
        s1 = new Stack<>();  //实例化对象
        s2 = new Stack<>();  //实例化对象
    }

    public void push(int x) {
        s1.push(x);  //入栈,把元素放入第一个栈
    }

    public int pop() {
        if (empty()) {  //判断两个栈是否为空
            return -1;
        }
        if (s2.isEmpty()) {    //如果栈S2为空
            //弹出s1的元素给s2
            while(!s1.isEmpty()){  //栈S1不为空就把元素依次放入栈S2
                s2.push(s1.pop());
            }
        }
        return s2.pop();   //S2依次出栈
    }

    //获取队头元素
    public int peek() {
        if (empty()) {  //如果两个栈为空
            return -1;
        }
        if (s2.isEmpty()) {
            while(!s1.isEmpty()){
                s2.push(s1.pop());
            }
        }
        return s2.peek();  //获取栈S2的栈顶元素
    }

    public boolean empty() {
        return s1.isEmpty() && s2.isEmpty();
    }
}